From 0035808befbc0d1a773ff69a913589ca7f570fc3 Mon Sep 17 00:00:00 2001 From: Tom Wilkie Date: Mon, 16 Apr 2007 22:58:12 +0100 Subject: [PATCH] Add *.get_all_records to XenAPI, make use of this for xm list signed-off-by: Tom Wilkie --- tools/python/xen/xend/XendAPI.py | 14 ++++++++++++-- tools/python/xen/xm/main.py | 11 ++++++----- 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/tools/python/xen/xend/XendAPI.py b/tools/python/xen/xend/XendAPI.py index 3593444bd5..9e5a8d0f69 100644 --- a/tools/python/xen/xend/XendAPI.py +++ b/tools/python/xen/xend/XendAPI.py @@ -575,15 +575,25 @@ class XendAPI(object): get_by_uuid = '%s_get_by_uuid' % api_cls get_uuid = '%s_get_uuid' % api_cls + get_all_records = '%s_get_all_records' % api_cls + def _get_by_uuid(_1, _2, ref): return xen_api_success(ref) def _get_uuid(_1, _2, ref): return xen_api_success(ref) + def unpack(v): + return v['Value'] + + def _get_all_records(_api_cls): + return lambda s, session: \ + xen_api_success([unpack(getattr(cls, '%s_get_record' % _api_cls)(s, session, ref))\ + for ref in unpack(getattr(cls, '%s_get_all' % _api_cls)(s, session))]) + setattr(cls, get_by_uuid, _get_by_uuid) setattr(cls, get_uuid, _get_uuid) - + setattr(cls, get_all_records, _get_all_records(api_cls)) # Autoplugging classes # -------------------- @@ -721,7 +731,7 @@ class XendAPI(object): Base_attr_ro = ['uuid'] Base_attr_rw = [] Base_methods = [('get_record', 'Struct')] - Base_funcs = [('get_all', 'Set'), ('get_by_uuid', None)] + Base_funcs = [('get_all', 'Set'), ('get_by_uuid', None), ('get_all_records', 'Set')] # Xen API: Class Session # ---------------------------------------------------------------- diff --git a/tools/python/xen/xm/main.py b/tools/python/xen/xm/main.py index 969cf609ac..f91dd6ca5c 100644 --- a/tools/python/xen/xm/main.py +++ b/tools/python/xen/xm/main.py @@ -741,11 +741,12 @@ def getDomains(domain_names, state, full = 0): if serverType == SERVER_XEN_API: doms_sxp = [] doms_dict = [] - dom_refs = server.xenapi.VM.get_all() - for dom_ref in dom_refs: - dom_rec = server.xenapi.VM.get_record(dom_ref) - dom_metrics_ref = server.xenapi.VM.get_metrics(dom_ref) - dom_metrics = server.xenapi.VM_metrics.get_record(dom_metrics_ref) + + dom_recs = server.xenapi.VM.get_all_records() + dom_metrics_recs = dict(map(lambda x: (x['uuid'], x), server.xenapi.VM_metrics.get_all_records())) + + for dom_rec in dom_recs: + dom_metrics = dom_metrics_recs[dom_rec['metrics']] states = ('running', 'blocked', 'paused', 'shutdown', 'crashed', 'dying') -- 2.30.2